package main

import (
	"fmt"
	"os"
)

/*
流程控制：

	条件控制：if else
	选择控制: switch case, select通道中使用
	循环控制：for range
	跳转控制：goto
	break，continue fallthrough
*/
func main() {
	if true && false {
		fmt.Print("true&&false")
	} else if false {
		fmt.Print("false")
	} else {
		fmt.Print("no value")
	}
	// comma ok做判断
	course := map[string]string{"wo": "shi", "ni": "baba"}
	if value, ok := course["wo"]; ok { //if condition 执行
		fmt.Print(value)
	}
	//打开文件判断文件是否存在
	if filehandle, err := os.Open("hello.txt"); err != nil {
		fmt.Print(filehandle, err.Error())
	}
	//switch, switch 不需要给case break
	switch varabiles := 100; {
	case varabiles > 90:
		fmt.Print("优秀")
	case varabiles > 60:
		fmt.Print("良好")
	case varabiles < 60:
		fmt.Print("不及格")
	default:
		fmt.Print("错误")
	}
	//跳转控制 goto break(不可用于goto只能由于for switc select) contiue
	gotofunc()
	//退出到标签使用break，continue也一样，会跳到外层去，而不是内层继续，如果把continue和break
TARGET:
	for i := 0; i < 10; i++ {
		for j := 0; j < 3; j++ {
			fmt.Print(i, j)
			if j == 2 {
				break TARGET //全部终止包括外层，如果没有标签，会外层循环执行完毕
			}
		}
	}
}

func gotofunc() {
	vars := 0
GOTO: //函数内循环，while一样
	fmt.Print(vars)
	vars++
	if vars < 10 {
		goto GOTO //指回去
	}
}
